#include "TableSymboles.h"

////////////////////////////////////////////////////////////////////////////////

template <class T> TableSymboles<T>::TableSymboles():table()
// Construit une table des symboles valués vide
{
}


template <class T> bool TableSymboles<T>::variableExiste(Symbole s) // return vrai si la variable est trouvé
{
  vector<SymboleValue<T>* >::iterator i;
  bool trouve = false;
  i=table.begin();
  while (i<table.end() && (**i).getChaine() < s.getChaine()) i++;
  if (i==table.end() || (**i).getChaine() != s.getChaine()) // si pas trouvé...
    trouve = true
      return trouve;
}


////////////////////////////////////////////////////////////////////////////////
template <class T> SymboleValue<T> * TableSymboles<T>::chercheAjoute (Symbole s)
// si s est identique à un symbole valué déjà présent dans la table,
// on renvoie un pointeur sur ce symbole valué.
// Sinon, on insère un nouveau symbole valué correspondant à s
// et on renvoie un pointeur sur le nouveau symbole valué inséré.
{
  vector<SymboleValue* >::iterator i;

  i=table.begin();
  while (i<table.end() && (**i).getChaine() < s.getChaine()) i++;
  if (i==table.end() || (**i).getChaine() != s.getChaine()) {// si pas trouvé...
//	if (typeid(s.getChaine())==typeid(int)) {
	      i=table.insert(i, new SymboleValue<T>(s));
//	}
//	if (typeid(*s.getChaine())==float) {
//	  cout << ((ValeurReelle*)v)->getValeur() << endl;
//	}
	//v=new ValeurChaine("salut");
//	else if (typeid(s.getChaine())==typeid(string)) {
//	      i=table.insert(i, new SymboleValue<string>(s));
//	}
//	if (typeid(s.getChaine())==int) {
//		v=new ValeurEntiere(atoi(s.getChaine().c_str()));
//	}
  }
  return *i;
}

////////////////////////////////////////////////////////////////////////////////
ostream & operator << (ostream & cout, TableSymboles ts)
// affiche ts sur cout
{
  cout << endl << "Contenu de la Table des Symboles Values :" << endl
       <<         "=========================================" << endl << endl;
  for (unsigned int i=0; i<ts.table.size(); i++)
    cout << "  " << *(ts.table[i]) << endl;
  cout << endl;
  return cout;
}
